/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg.component.filter;

import java.util.List;
import ksvg.core.SVGFilter;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
import tk.eigh.ksvg.types.SVGNumber;

/**
 *
 * @author nt
 */
@JSFComponent(name = "svg:TransferFunction",
type = "tk.eigh.svg.TransferFunction",
family = "filter.TransferFunction",
clazz = "ksvg.filter.TransferFunction",
tagClass = "ksvg.tags.filter.TransferFunctionTag",
defaultRendererType = "filter.SVGTransferFunctionRenderer",
desc = "")
public abstract class AbstractTransferFunction extends SVGFilter {

    /**
     * type = "identity | table | discrete | linear | gamma"<br/> <a
     * href="http://www.w3.org/TR/SVG/filters.html#feComponentTransferTypeAttribute">see</a>
     * Animatable: yes.
     */
    @JSFProperty(required = true, defaultValue = "identity")
    public abstract String getType();

    /**
     * tableValues = "(list of <number>s)"<br/> When type="table", the list of
     * <number>s v0,v1,...vn, separated by white space and/or a comma, which
     * define the lookup table. An empty list results in an identity transfer
     * function. If the attribute is not specified, then the effect is as if an
     * empty list were provided.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract List<SVGNumber> getTableValues();

    /**
     * slope = "<number>"<br/> When type="linear", the slope of the linear
     * function. If the attribute is not specified, then the effect is as if a
     * value of 1 were specified.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract SVGNumber getSlope();

    /**
     * intercept = "<number>"<br/> When type="linear", the intercept of the
     * linear function. If the attribute is not specified, then the effect is as
     * if a value of 0 were specified.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract SVGNumber getIntercept();

    /**
     * amplitude = "<number>"<br/> When type="gamma", the amplitude of the gamma
     * function. If the attribute is not specified, then the effect is as if a
     * value of 1 were specified.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract SVGNumber getAmplitude();

    /**
     * exponent = "<number>"<br/> When type="gamma", the exponent of the gamma
     * function. If the attribute is not specified, then the effect is as if a
     * value of 1 were specified.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract SVGNumber getExponent();

    /**
     * offset = "<number>"<br/> When type="gamma", the offset of the gamma
     * function. If the attribute is not specified, then the effect is as if a
     * value of 0 were specified.<br/> Animatable: yes.
     */
    @JSFProperty
    public abstract SVGNumber getOffset();
    
    /**
     * specifies the Channel to transform
     */
    @JSFProperty
    public abstract String getChannel();
}